with communautes;
with Ada.Text_IO;
generic
   type individu (<>) is private;
   type message (<>) is private;
   type cercle (<>) is private;
   with function putIndividu(I : individu) return string is <>;
   with function putCercle(C : cercle) return string is <>;
   with function putMessage(M : message) return string;

package murs is

   type mur is private;

   function ajouter(un_mur:mur;T:message;Auteur:Individu; I : Natural) return mur;
   function est_defini(un_mur: mur; I: Natural) return boolean ;
   function auteur(un_mur : mur; N : Natural) return individu;
   function creer (Proprietaire : individu ) return mur;
   function getMur(un_mur : mur) return String;

private

   type un_commentaire is record
      M : access message;
      I : access individu;
   end record;

   type les_com is array (positive range <>) of access un_commentaire;

   type un_post is record
      M : access message;
      I : access individu;
      N : natural;
      nextCom : access les_com;
   end record;

   type les_post is array (positive range <>) of access un_post;


   type mur is record
      Proprietaire : access individu;
      nextPost : access les_post;
   end record;


   type access_mur is access mur;

end murs;
